home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1999 #2 / Amiga Plus CD - 1999 - No. 2.iso / System-Boost / Workbench / ToolManager / Source / Converter / sound.c < prev   
C/C++ Source or Header  |  1998-06-17  |  2KB  |  86 lines

  1. /*
  2.  * sound.c  V3.1
  3.  *
  4.  * ToolManager old preferences converter for Sound Objects
  5.  *
  6.  * Copyright (C) 1990-98 Stefan Becker
  7.  *
  8.  * This source code is for educational purposes only. You may study it
  9.  * and copy ideas or algorithms from it for your own projects. It is
  10.  * not allowed to use any of the source codes (in full or in parts)
  11.  * in other programs. Especially it is not allowed to create variants
  12.  * of ToolManager or ToolManager-like programs from this source code.
  13.  *
  14.  */
  15.  
  16. #include "converter.h"
  17.  
  18. /* Local data */
  19. static struct MinList IDList;
  20. static struct StandardDATAChunk sdc;
  21.  
  22. /* Old Prefs stuff */
  23. struct SoundPrefsObject {
  24.                          ULONG spo_StringBits;
  25.                         };
  26. #define SOPO_NAME    (1L << 0)
  27. #define SOPO_COMMAND (1L << 1)
  28. #define SOPO_PORT    (1L << 2)
  29.  
  30. /* Initialize Sound ID list */
  31. void InitSoundIDList(void)
  32. {
  33.  NewList((struct List *) &IDList);
  34. }
  35.  
  36. /* Free Sound ID list */
  37. void FreeSoundIDList(void)
  38. {
  39.  FreeIDList(&IDList);
  40. }
  41.  
  42. /* Find ID to corresponding Sound name */
  43. ULONG FindSoundID(const char *name)
  44. {
  45.  return(FindIDInList(&IDList, name));
  46. }
  47.  
  48. /* Conversion routine */
  49. #undef  DEBUGFUNCTION
  50. #define DEBUGFUNCTION ConvertSoundConfig
  51. BOOL ConvertSoundConfig(void *chunk, struct IFFHandle *iffh, ULONG id)
  52. {
  53.  struct SoundPrefsObject *spo = chunk;
  54.  char                    *s   = (char *) (spo + 1);
  55.  BOOL                     rc  = FALSE;
  56.  
  57.  SOUND_LOG(LOG3(Entry, "Chunk 0x%08lx IFF Handle 0x%08lx ID 0x%08lx",
  58.                 chunk, iffh, id))
  59.  
  60.  /* Get name to create ID list entry */
  61.  if ((spo->spo_StringBits & SOPO_NAME) && AddIDToList(&IDList, s, id)) {
  62.  
  63.   /* Initialize fixed data */
  64.   sdc.sdc_ID    = id;
  65.   sdc.sdc_Flags = 0;
  66.  
  67.   /* Create new config entry */
  68.   rc = (PushChunk(iffh, ID_TMSO, ID_FORM, IFFSIZE_UNKNOWN) == 0) &&
  69.        (PushChunk(iffh, 0,       ID_DATA, IFFSIZE_UNKNOWN) == 0) &&
  70.        (WriteChunkBytes(iffh, &sdc, sizeof(struct StandardDATAChunk))
  71.          == sizeof(struct StandardDATAChunk)) &&
  72.        (PopChunk(iffh) == 0) &&
  73.        (((spo->spo_StringBits & SOPO_NAME)    == 0) ||
  74.         (s = ConvertConfigString(s, iffh, ID_NAME))) &&
  75.        (((spo->spo_StringBits & SOPO_COMMAND) == 0) ||
  76.         (s = ConvertConfigString(s, iffh, ID_CMND))) &&
  77.        (((spo->spo_StringBits & SOPO_PORT) == 0) ||
  78.         (s = ConvertConfigString(s, iffh, ID_PORT))) &&
  79.        (PopChunk(iffh) == 0)  ;
  80.  }
  81.  
  82.  SOUND_LOG(LOG1(Result, "%ld", rc))
  83.  
  84.  return(rc);
  85. }
  86.